import Vue from "vue";
import Vuex from "vuex";

// 安装插件
Vue.use(Vuex);

export default new Vuex.Store({
  // 存储数据的容器
  state: {
    count: 0,
  },
  // 存储只读计算属性数据的容器
  getters: {
    oddOrEven(state) {
      return state.count % 2 === 1 ? "奇数" : "偶数";
    },
  },
  actions: {
    // 加
    increment({ commit }, val) {
      // action函数默认有第一个参数：store
      // action函数的第二个参数：看调用dispatch方法是否传递额外参数
      commit("INCREMENT", val);
    },
    // 减
    decrement({ commit }, val) {
      commit("DECREMENT", val);
    },
    incrementIfOdd({ commit, state }, val) {
      if (state.count % 2 === 1) {
        commit("INCREMENT", val);
      }
    },
    incrementAsync({ commit }, val) {
      setTimeout(() => {
        commit("INCREMENT", val);
      }, 1000);
    },
  },
  mutations: {
    INCREMENT(state, val) {
      // mutation函数默认有第一个参数：state
      // mutation函数的第二个参数：看调用commit方法是否传递额外参数
      state.count += val;
    },
    DECREMENT(state, val) {
      state.count -= val;
    },
  },
});
